package com.sparkseries.dao;

import com.sparkseries.domain.SysRole;
import com.sparkseries.domain.SysUser;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 角色管理
 */
@Mapper
public interface SysRoleMapper {
    /**
     * 创建角色
     * @param role 角色类
     * @return Integer
     */
    Integer createRole(SysRole role);

    /**
     * 初始化用户角色
     * @param userId 用户ID
     * @return Integer
     */
    Integer initUserRole(@Param("userId") Long userId);

    /**
     * 绑定用户角色
     * @param userIds 用户ID集合
     * @param roleId 角色ID
     * @return Integer
     */
    Integer bindUserWithRole(@Param("userIds") List<Long> userIds, @Param("roleId") Long roleId);

    /**
     * 删除角色
     * @param roleId 角色ID
     * @return Integer
     */
    Integer deleteRole(@Param("roleId") Long roleId);

    /**
     * 删除用户角色绑定（删除角色用）
     * @param userIds 用户ID集合
     * @param roleId 角色ID
     * @return Integer
     */
    Integer deleteRoleBindR(@Param("userIds") List<Long> userIds, @Param("roleId") Long roleId);

    /**
     * 删除用户角色绑定（删除用户用）
     * @param userId 用户ID
     * @return Integer
     */
    Integer deleteRoleBindU(@Param("userId") Long userId);

    /**
     * 修改角色信息
     * @param role 角色类
     * @return Integer
     */
    Integer updateRole(SysRole role);

    /**
     * 修改角色状态
     * @param roleId 角色ID
     * @param status 是否启用（0-禁用，1-启用）
     * @return Integer
     */
    Integer updateRoleStatus(@Param("roleId") Long roleId, @Param("status") Integer status);

    /**
     * 获取角色列表
     * @param role 角色类
     * @return 角色类集合
     */
    List<SysRole> listRole(SysRole role);

    /**
     * 通过角色ID获取角色信息
     * @param roleId 角色ID
     * @return 角色类
     */
    SysRole getRoleById(@Param("roleId") Long roleId);

    /**
     * 通过角色ID集合获取角色信息集合
     * @param roleId 角色ID集合
     * @return 角色类集合
     */
    List<SysRole> getRolesByIds(@Param("roleId") List<Long> roleId);

    /**
     * 获取该角色下的用户
     * @param roleId 角色ID
     * @return 角色类集合
     */
    List<SysUser> listUsersWithRole(@Param("roleId") Long roleId);

    /**
     * 查找用户拥有角色的ID
     * @param userId 用户ID
     * @return 角色ID集合
     */
    List<Long> listRoleIdsWithUser(@Param("userId") Long userId);
}
